大模型如何使用工具?一文速览最新进展
© 作者|陈志朋
机构|中国人民大学
引言:近来,大语言模型飞速发展,在众多领域都取得了优秀的成绩,甚至在某些领域中超越了人类的表现。但是,大语言模型在一些具有挑战性的问题上(如:复杂推理、细粒度知识运用等)都难以取得优异的表现。有研究指出,外部工具的使用可以提升大模型在复杂问题上的表现。本文针对大模型对外部工具的使用,整理了多篇相关工作,旨在与读者分享并相互交流。文章也同步发布在 AI Box 知乎专栏(知乎搜索 AI Box 专栏),欢迎大家在知乎专栏的文章下方评论留言,交流探讨!
TALM: tool augmented language models
论文:https://arxiv.org/abs/2205.12255
基于transformer的语言模型可以通过提升规模来提升它在各种任务当中的表现。但是,对于一些需要访问特定数据(如:训练时没有见过的数据、经常发生变化的数据、隐私数据等)的任务,语言模型就无法单纯的使用提升规模的方式来提升在这些任务上的表现。针对这个问题,作者提出了TALM,这是一个基于文本的方式,使用外部工具来增强语言模型的表现。
具体来说,作者使用预训练好的T5作为基座模型,使用文本到文本的方法进行微调,是语言模型能够更好的使用工具。首先,训练语言模型根据问题输出需要使用的工具和工具相关的参数。然后,根据模型的输出相同相应的外部工具并返回相关结果。最后,训练模型根据问题和外部工具返回的结果,输出最终的答案。
为了能够解决样例不足的问题,作者提出了self-play技术。首先,使用一个较小的数据集合D训练得到一个TALM,然后针对数据集中的每一个样例,尝试使用不同的工具来解决这个问题。如果TALM能够正确的解决这个问题,那么就把这条数据及其相关的工具加入到数据集合D中,不断对训练集进行扩充,以得到一个大规模的数据集。
在实验方面,作者使用Natural Question和MathQA两个数据集对TALM进行了测试,结果表明使用了外部工具进行增强的语言模型能够更好的处理这些问答相关的问题。同时,作者还对模型不同参数量的版本进行了测试,实验发现随着参数量的提升,语言模型能够更好的使用外部工具。
PAL: Program-aided Language Models
论文:https://arxiv.org/abs/2211.10435
代码:http://reasonwithpal.com/
在推理任务当中,尽管推理问题能够被正确地拆解,大语言模型经常会在推理过程中出现逻辑错误或者计算错误。为了解决这个问题,作者提出了一种新的方法PAL,将自然语言形式的推理问题作为大语言模型的输入,并要求大模型以代码的形式输出相关的推理过程,最后使用外部工具(如:编译器、执行器)来执行代码并得到最终的答案。
Atlas: Few-shot Learning with Retrieval Augmented Language Models
论文:https://arxiv.org/abs/2208.03299
在知识密集型任务当中,使用检索增强的语言模型能够拥有很好的表现,并且不需要很大的参数量。但是,对于few-shot场景下,检索能否有效增强语言模型的能力还不得而知。基于这个问题,作者提出了Atlas,一个预训练的检索增强语言模型,只需要使用非常少的训练样本就能够学习和处理知识密集型任务。
具体来说,作者使用的检索模块是Contriever,使用的预训练语言模型为T5。在训练过程中,作者使用了ADist,EMDR^2,PDist和LOOP四个训练目标对检索器和语言模型进行联合训练。同时,作者也使用了无监督的方式进行联合训练,包括Prefix language modeling,Masked language modeling和Title to section generation。在实验方面,使用了KILT,MMLU和一些其他的问答数据集对Atlas进行了测试,证明了检索增强的有效性。
Toolformer: Language Models Can Teach Themselves to Use Tools
论文:https://arxiv.org/abs/2302.04761
在众多任务上,大模型展现出了令人印象深刻的能力。仅仅使用很少的样例或者文本形式的指令,大语言模型就能够很好的完成相关任务。但是,大模型在一些场景下仍然存在困难,需要外部工具来辅助以更好的解决这些任务。在这篇工作中,作者提出了一个新的方法,让语言模型自己教自己学习使用外部工具。
具体来说,作者构造了一个包含外部工具API使用方法的数据集,使用这个数据集对语言模型进行微调,是模型能够掌握工具的使用方法。在数据集的构造当中,作者采样了一些位置加入了对工具的API调用,并比较了插入API和未插入API时二者的损失函数,过滤出了一些构造较为合理的数据,将这些数据进行整合获得了包含API调用的数据集。使用这个数据集,就能够对语言模型进行微调,使他们能够掌握工具的使用方式。在下游任务的推理当中,如果模型生成了相关的API调用,就会停止生成,并使用外部工具根据模型生成的内容获得结果返回给模型,模型在进行后续的生成。在实验方面,作者使用GPT-J作为基座模型,在推理任务上超越了baseline。
ART: Automatic multi-step reasoning and tool-use for large language models
论文:https://arxiv.org/abs/2303.09014
大语言模型可以在few-shot或者zero-shot设置下通过生成推理过程来进行推理。同时,外部工具可以用来辅助模型处理下游任务。在前人的工作中,对于一个新的任务或者新的工具,需要手动构造相关的样例用于提示大模型。作者提出了ART,它能够冻结大模型并自动以程序的形式生成中间的推理步骤。
具体来说,ART分为三个部分:prompt构建、生成、人类反馈。其中,人类反馈的步骤是一个可选的步骤。在prompt构建的过程中,ART从任务库中检索出相似的任务作为样例。在生成过程中,大模型生成相关的代码,ART在外部工具被调用的时候停止大模型的生成过程,并调用外部工具返回结果。在人类反馈过程中,人类可以添加新的解离后的样例到任务库当中,或者修改工具库中工具的使用。
ReAct: Synergizing Reasoning and Acting in Language Models
论文:https://arxiv.org/abs/2210.03629
代码:https://react-lm.github.io/
前人的研究表明,大语言模型具有很强的推理能力和执行规划能力。在这篇工作中,作者探究了使用模型去生成推理过程和任务特定的行动。总的来说,推理过程有助于模型归纳、跟踪和更新行动计划以及处理异常,任务特定的行动能够是模型与外部环境或工具进行对接并收集额外信息。
具体来说,对于一个通用的框架,在某一步的推理过程中,模型接收到一个来自外部环境的结果,并根据历史推理过程中外部环境的结果和行动过程来确定下一步需要采取的行动。在ReAct中,可以执行的行动的范围不仅仅是与外部环境的交互,同时也包括了自然语言的推理(可以成为thought或者reasoning trace)。语言模型可以根据上下文决定下一步的行动。同时,作者认为ReAct方式有以下几个优点:1. ReAct所需的prompt非常直观且易于设计;2. ReAct是通用并且灵活的;3. ReAct能够给模型带来性能提升并且具有较强的鲁棒性;4. ReAct是能够与对齐人类偏好并且是可控的。在实验方面,在知识密集型任务HotpotQA和FEVER上的测试都辨明了ReAct的有效性。
CRITIC: Large Language Models Can Self-Correct with Tool-Interactive Critiquing
论文:https://arxiv.org/abs/2305.11738
代码:https://github.com/microsoft/ProphetNet/tree/master/CRITIC
大语言模型在推理的过程中,可能出现不一致或者有问题的行为,例如幻象、生成存在缺陷的代码、生成有害的内容等。作者模仿人类使用工具验证的行为,提出了CRITIC。语言模型根据问题生成出相关答案之后,可以和外部工具进行交互,使用适当的工具对生成的内容进行评估,根据得到的反馈对之前生成的内容进行修改。
具体来说,大语言模型被作为一个黑箱,根据任务相关的输入得到一个原始输出。然后,和外部工具进行交互,包括知识图谱,代码解释器、搜索引擎等。通过和外部工具的交互,能够获得一系列的结果,大模型根据这些结果生成相关的反馈。最后,根据任务相关的输入、原始输出、与工具交互的结果等多方面的内容,大模型对原始输出进行修改,等到新的输出。改过程可以迭代进行,多次修正输出的内容。在实验方面,作者使用AmbigNQ、TriviaQA和HotpotQA三个问答数据集进行评测,CRITIC能够超越普通CoT和ReAct等方法,取得了良好的表现。
Making Language Models Better Tool Learners with Execution Feedback
论文:https://arxiv.org/abs/2305.13068
代码:https://github.com/zjunlp/trice
前人的工作表明了AI系统可以利用工具增强自己的能力并和外界进行交互。但是如何引导模型正确使用工具,仍然是一个需要探究的问题。在这篇工作中,作者提出了TRICE。这是一个两阶段的端到端的框架,能够使语言模型通过工具执行的结果的反馈进行持续地学习,可以让模型高效地学习何时与如何使用工具。
具体来说,训练过程的两个阶段分别为:Behavior Cloning,RLEF。在Behavior Cloning阶段,模型根据任务输入,输出相关的工具的使用方案。在RLEF阶段,使用强化学习的框架,根据工具的结果设计奖励函数,对模型进行强化学习,继续增强模型使用工具的能力。在实验方面,作者使用Alpaca-7B作为基座模型,比较了Toolformer等基线方法,在数学相关任务上进行评测,证明了TRICE的有效性。
更多推荐
SIGIR 2023 | EulerNet: 复数向量空间下的特征交互建模
↓↓↓